/********************************** (C) COPYRIGHT *******************************
 * File Name          : central.h
 * Author             : WCH
 * Version            : V1.0
 * Date               : 2018/11/12
 * Description        : 中心设备头文件
 *********************************************************************************
 * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
 * Attention: This software (modified or not) and binary are used for 
 * microcontroller manufactured by Nanjing Qinheng Microelectronics.
 *******************************************************************************/

#ifndef CENTRAL_H
#define CENTRAL_H

#ifdef __cplusplus
extern "C" {
#endif

/*********************************************************************
 * INCLUDES
 */

/*********************************************************************
 * CONSTANTS
 */

// Simple BLE Observer Task Events
#define START_DEVICE_EVT              0x0001
#define START_DISCOVERY_EVT           0x0002
#define START_SCAN_EVT                0x0004
#define START_SVC_DISCOVERY_EVT       0x0008
#define START_PARAM_UPDATE_EVT        0x0010
#define START_PHY_UPDATE_EVT          0x0020
#define START_READ_OR_WRITE_EVT       0x0040
#define START_WRITE_CCCD_EVT          0x0080
#define START_READ_RSSI_EVT           0x0100
#define ESTABLISH_LINK_TIMEOUT_EVT    0x0200


/**
 * BLE广告数据类型枚举
 * 对应蓝牙核心规范中的广告数据类型(AD Type)
 */
typedef enum {
    BLE_HS_ADV_TYPE_FLAGS                  = 0x01,  /**< 广告标志位 */
    BLE_HS_ADV_TYPE_INCOMP_UUIDS16         = 0x02,  /**< 不完整的16位UUID列表 */
    BLE_HS_ADV_TYPE_COMP_UUIDS16           = 0x03,  /**< 完整的16位UUID列表 */
    BLE_HS_ADV_TYPE_INCOMP_UUIDS32         = 0x04,  /**< 不完整的32位UUID列表 */
    BLE_HS_ADV_TYPE_COMP_UUIDS32           = 0x05,  /**< 完整的32位UUID列表 */
    BLE_HS_ADV_TYPE_INCOMP_UUIDS128        = 0x06,  /**< 不完整的128位UUID列表 */
    BLE_HS_ADV_TYPE_COMP_UUIDS128          = 0x07,  /**< 完整的128位UUID列表 */
    BLE_HS_ADV_TYPE_INCOMP_NAME            = 0x08,  /**< 缩短的本地名称 */
    BLE_HS_ADV_TYPE_COMP_NAME              = 0x09,  /**< 完整的本地名称 */
    BLE_HS_ADV_TYPE_TX_PWR_LVL             = 0x0a,  /**< 发射功率级别 */
    BLE_HS_ADV_TYPE_SEC_MGR_TK_VALUE       = 0x10,  /**< 安全管理器TK值 */
    BLE_HS_ADV_TYPE_SEC_MGR_OOB_FLAG       = 0x11,  /**< 安全管理器OOB数据标志 */
    BLE_HS_ADV_TYPE_SLAVE_ITVL_RANGE       = 0x12,  /**< 从机连接间隔范围 */
    BLE_HS_ADV_TYPE_SOL_UUIDS16            = 0x14,  /**< 16位服务搜索UUID列表 */
    BLE_HS_ADV_TYPE_SOL_UUIDS128           = 0x15,  /**< 128位服务搜索UUID列表 */
    BLE_HS_ADV_TYPE_SVC_DATA_UUID16        = 0x16,  /**< 16位UUID服务数据 */
    BLE_HS_ADV_TYPE_PUBLIC_TGT_ADDR        = 0x17,  /**< 目标公共地址列表 */
    BLE_HS_ADV_TYPE_RANDOM_TGT_ADDR        = 0x18,  /**< 目标随机地址列表 */
    BLE_HS_ADV_TYPE_APPEARANCE             = 0x19,  /**< 设备外观 */
    BLE_HS_ADV_TYPE_ADV_ITVL               = 0x1a,  /**< 广告间隔 */
    BLE_HS_ADV_TYPE_DEVICE_ADDR             = 0x1b,  /**< 设备地址 */
    BLE_HS_ADV_TYPE_LE_ROLE                = 0x1c,  /**< LE角色 */
    BLE_HS_ADV_TYPE_SOL_UUIDS32            = 0x1f,  /**< 32位服务搜索UUID列表 */
    BLE_HS_ADV_TYPE_SVC_DATA_UUID32        = 0x20,  /**< 32位UUID服务数据 */
    BLE_HS_ADV_TYPE_SVC_DATA_UUID128       = 0x21,  /**< 128位UUID服务数据 */
    BLE_HS_ADV_TYPE_URI                    = 0x24,  /**< URI */
    BLE_HS_ADV_TYPE_MESH_PROV              = 0x29,  /**< Mesh配置数据 */
    BLE_HS_ADV_TYPE_MESH_MESSAGE           = 0x2a,  /**< Mesh消息 */
    BLE_HS_ADV_TYPE_MESH_BEACON            = 0x2b,  /**< Mesh信标 */
    BLE_HS_ADV_TYPE_MFG_DATA               = 0xff   /**< 厂商特定数据 */
} ble_hs_adv_type_t; 

/**
 * @brief 模式切换
 * 
 */
typedef enum{
    BleCentralModeOpen,
    BlePeripheralModeOpen,
    BleCentralModeClose,
    BlePeripheralModeClose,
}BleMode_t;

/*********************************************************************
 * MACROS
 */

/*********************************************************************
 * FUNCTIONS
 */

/*
 * Task Initialization for the BLE Application
 */
extern void Central_Init(void);

/*
 * Task Event Processor for the BLE Application
 */
extern uint16_t Central_ProcessEvent(uint8_t task_id, uint16_t events);

/**
 * @brief 模式切换
 * 
 * @param Mode 
 */
extern void Mode_ReFresh(BleMode_t Mode);

/**
 * @brief 停止Central任务

 * 
 */
extern void Stop_Central_Task(void);

/**
 * @brief 启动Central任务
 * 
 */
extern void Start_Central_Task(void);
/*********************************************************************
*********************************************************************/

#ifdef __cplusplus
}
#endif

#endif
